package jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCDemo9 {
    public static void main(String[] args) {
        //使用预编译器执行UPDATEY语句

      //UPDATEY ：更新
        //数据库连接
        try (Connection connection = DBUtil.getConnection();){

        //// 关闭自动提交模式
            //当调用 connection.setAutoCommit(false); 时，自动提交模式就会被关闭，进入手动提交模式
            connection.setAutoCommit(false);

        String sql = "UPDATE user" +    //表示要对 user 表进行更新操作。
                      "SET password=?,nickname=?,age=? " + //指定要更新的列以及它们的新值。? 是占位符，后续会用实际的值来替换。
                     "WHERE id=?";  //是更新操作的条件，意味着只有 id 符合特定值的记录才会被更新。

            PreparedStatement ps = connection.prepareStatement(sql);

           //更新数据库中 user 表会把id为2的记录的password字段
            // 更新为 "888999"，nickname 字段更新为 "丽丽"，age 字段更新为 20
            ps.setString(1,"888999");
            ps.setString(2,"丽丽");
            ps.setInt(3,20);
           ps.setInt(4,2);

           //executeUpdate() 方法会返回受影响的行数，
            // 也就是成功更新的记录数量。这个数量会被存储在变量 num 中。
           int num=ps.executeUpdate();

          //使用三元运算符判断 num 是否大于 0。如果大于 0，说明至少有一条记录被更新，输出 "修改成功"；否则输出 "修改失败"。
           System.out.println(num>0?"修改成功":"修改失败");

       //提交当前事务。在 JDBC 中，
            // 若将自动提交模式关闭（即调用 connection.setAutoCommit(false);）
            // 那么一系列的SQL操作就会被视为一个事务，直至调用 commit() 方法，这些操作的更改才会被永久保存到数据库里。
         connection.commit();

         System.out.println("事务提交了，修改算数了");


        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
